#pragma once

#include <memory>

#include "ApproxAlgorithm.h"
    
class SelectorAlgorithm {
public:

    SelectorAlgorithm(std::shared_ptr<ApproxAlgorithm> approx_alg,
                      std::shared_ptr<ApproxAlgorithm> img_compare_alg) :
                 approx_alg_(approx_alg),
                 img_compare_alg_(img_compare_alg) { }

    SelectorAlgorithm(const SelectorAlgorithm&) = delete;
    SelectorAlgorithm& operator=(const SelectorAlgorithm&) = delete;
    virtual ~SelectorAlgorithm() = default;

    double getSim(const FilePairType& file_pair) const;

private:
    std::shared_ptr<ApproxAlgorithm> approx_alg_;
    std::shared_ptr<ApproxAlgorithm> img_compare_alg_;
};